function ajax (options = { async: true}) {
  let { url, type, async, data } = options
  // XMLHttpRequest 对象用于在后台与服务器交换数据(处理兼容性)
  let xmlObj = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")
  let temp="";
  for(let key in data){
    temp += key + "=" + data[key] + "&";
  }
  data = temp.slice(0,-1);
  // 当请求被发送到服务器时，我们需要执行一些基于响应的任务。
  // 每当 readyState 改变时，就会触发 onreadystatechange 事件。
  // 0 － （未初始化）还没有调用send()方法
  // 1 － （载入）已调用send()方法，正在发送请求
  // 2 － （载入完成）send()方法执行完成，已经接收到全部响应内容
  // 3 － （交互）正在解析响应内容
  // 4 － （完成）响应内容解析完成，可以在客户端调用了
  xmlObj.onreadystatechange = () => {
    if (xmlObj.readyState === 4) {
      // 当 readyState 等于 4 且状态为 200 时，表示响应已就绪
      if (xmlObj.status === 200) {
        options.success(xmlObj.responseText)
      }
    }
  }
  // open 规定请求的类型、URL 以及是否异步处理请求。
  // send 将请求发送到服务器。
  if (type === 'GET') {
    xmlObj.open('GET', `${url}?${data}`, async)
    xmlObj.send()
  } else if (type === 'POST') {
    xmlObj.open('POST', url, async)
    xmlObj.send(data)
  }
}